home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / video / fly8111-.000 / fly8111- / fly8 / hudmenu.c < prev    next >
C/C++ Source or Header  |  1979-12-31  |  17KB  |  899 lines

  1. /* --------------------------------- hudmenu.c ------------------------------ */
  2.  
  3. /* This is part of the flight simulator 'fly8'.
  4.  * Author: Eyal Lebedinsky (eyal@ise.canberra.edu.au).
  5. */
  6.  
  7. /* HUD Menus.
  8. */
  9.  
  10. #include "plane.h"
  11.  
  12.  
  13. /* Select HUD type
  14. */
  15.  
  16. static MENU FAR    MenuHudType[] = {
  17.     {'0', "Classic"},    /*  0 */
  18.     {'1', "FA18"},        /*  1 */
  19.     {'2', "F16"},        /*  2 */
  20.     {'3', "F15"},        /*  3 */
  21.     {'4', "Ether"},        /*  4 */
  22. {'\0', 0}};
  23.  
  24. extern int FAR
  25. menu_hudtype (void)
  26. {
  27.     int    sel;
  28.  
  29.     sel = (EE(CV)->hud1&HUD_TYPES)/HUD_TYPE;
  30.     sel = menu_open (MenuHudType, sel);
  31.  
  32.     switch (sel) {
  33.     case MENU_ABORTED:
  34.     case MENU_FAILED:
  35.         break;
  36.     default:
  37.         EE(CV)->hud1 = (EE(CV)->hud1 & ~HUD_TYPES) | (sel*HUD_TYPE);
  38.         hud_setup (CV);
  39.         break;
  40.     }
  41.     if (MENU_FAILED != sel)
  42.         menu_close ();
  43.  
  44.     return (0);
  45. }
  46.  
  47. /* Select ladder sizes;
  48. */
  49.  
  50. static MENU FAR    MenuLdSize[] = {
  51.     {'g', "gap"},        /*  0 */
  52.     {'s', "step"},        /*  1 */
  53.     {'h', "horizon"},    /*  2 */
  54.     {'l', "land"},        /*  3 */
  55.     {'t', "tip"},        /*  4 */
  56.     {'n', "ndash"},        /*  5 */
  57. {'\0', 0}};
  58.  
  59. LOCAL_FUNC int NEAR
  60. menu_ldsize (void)
  61. {
  62.     int    sel, quit;
  63.  
  64.     sel = 0;
  65.     for (quit = 0; !quit;) {
  66.         sel = menu_open (MenuLdSize, 0);
  67.         switch (sel) {
  68.         case MENU_ABORTED:
  69.         default:
  70.             quit = 1;
  71.             break;
  72.         case 0:
  73.             get_num ("gap size", &EE(CV)->ldgap, MT_SHORT,
  74.                     0, FONE, FONE/128);
  75.             break;
  76.         case 1:
  77.             get_num ("step size", &EE(CV)->ldstep, MT_SHORT,
  78.                     0, FONE, FONE/128);
  79.             break;
  80.         case 2:
  81.             get_num ("horizon size", &EE(CV)->ldstep0, MT_SHORT,
  82.                     0, FONE, FONE/128);
  83.             break;
  84.         case 3:
  85.             get_num ("land size", &EE(CV)->ldstepg, MT_SHORT,
  86.                     0, FONE, FONE/128);
  87.             break;
  88.         case 4:
  89.             get_num ("tip size", &EE(CV)->ldtip, MT_SHORT,
  90.                     0, FONE, FONE/128);
  91.             break;
  92.         case 5:
  93.             get_num ("ndash", &EE(CV)->ldndash, MT_SHORT,
  94.                     0, 8, 1);
  95.             break;
  96.         }
  97.         if (MENU_FAILED != sel)
  98.             menu_close ();
  99.     }
  100.     return (0);
  101. }
  102.  
  103. /* Select ladder style
  104. */
  105.  
  106. static MENU FAR    MenuLadder[] = {
  107.     {'0', "off"},        /*  0 */
  108.     {'1', "on"},        /*  1 */
  109.     {'2', "toggle"},    /*  2 */
  110.     {'l', "ladder"},    /*  3 */
  111.     {'p', "pinned"},    /*  4 */
  112.     {'r', "right"},        /*  5 */
  113.     {'e', "erect"},        /*  6 */
  114.     {'c', "color"},        /*  7 */
  115.     {'f', "funnel"},    /*  8 */
  116.     {'s', "slant"},        /*  9 */
  117.     {'z', "zenith"},    /* 10 */
  118.     {'u', "under"},        /* 11 */
  119.     {'t', "tip0"},        /* 12 */
  120.     {'h', "hold"},        /* 13 */
  121.     {'R', "h roll"},    /* 14 */
  122.     {'S', "sun"},        /* 15 */
  123.     {'i', "negtip"},    /* 16 */
  124.     {'x', "sizes"},        /* 17 */
  125. {'\0', 0}};
  126.  
  127. LOCAL_FUNC int NEAR
  128. menu_ladder (void)
  129. {
  130.     int    sel, quit;
  131.  
  132.     SetOption (0, 2);
  133.     sel = 0;
  134.     for (quit = 0; !quit;) {
  135.         sel = menu_open (MenuLadder, 0);
  136.         switch (sel) {
  137.         case MENU_ABORTED:
  138.         default:
  139.             quit = 1;
  140.             break;
  141.         case 0:
  142.         case 1:
  143.         case 2:
  144.             SetOption (0, sel);
  145.             break;
  146.         case 3:
  147.             SetOption (&EE(CV)->hud, HUD_LADDER);
  148.             break;
  149.         case 4:
  150.             SetOption (&EE(CV)->ladder, LD_FIXED);
  151.             break;
  152.         case 5:
  153.             SetOption (&EE(CV)->ladder, LD_RIGHT);
  154.             break;
  155.         case 6:
  156.             SetOption (&EE(CV)->ladder, LD_ERECT);
  157.             break;
  158.         case 7:
  159.             SetOption (&EE(CV)->ladder, LD_COLOR);
  160.             break;
  161.         case 8:
  162.             SetOption (&EE(CV)->ladder, LD_FUNNEL);
  163.             break;
  164.         case 9:
  165.             SetOption (&EE(CV)->ladder, LD_SLANT);
  166.             break;
  167.         case 10:
  168.             SetOption (&EE(CV)->ladder, LD_ZENITH);
  169.             break;
  170.         case 11:
  171.             SetOption (&EE(CV)->ladder, LD_UNDER);
  172.             break;
  173.         case 12:
  174.             SetOption (&EE(CV)->ladder, LD_TIP0);
  175.             break;
  176.         case 13:
  177.             SetOption (&EE(CV)->ladder, LD_HOLD);
  178.             break;
  179.         case 14:
  180.             SetOption (&EE(CV)->ladder, LD_HOLDROLL);
  181.             break;
  182.         case 15:
  183.             SetOption (&EE(CV)->ladder, LD_SUN);
  184.             break;
  185.         case 16:
  186.             SetOption (&EE(CV)->ladder, LD_NEGTIP);
  187.             break;
  188.         case 17:
  189.             menu_ldsize ();
  190.             break;
  191.         }
  192.         if (MENU_FAILED != sel)
  193.             menu_close ();
  194.     }
  195.     return (0);
  196. }
  197.  
  198. /* Select HUD parts (x)
  199. */
  200.  
  201. static MENU FAR    MenuHudGround[] = {
  202.     {'0', "off"},        /*  0 */
  203.     {'1', "on"},        /*  1 */
  204.     {'2', "toggle"},    /*  2 */
  205.     {'p', "gnd ptr"},    /*  3 */
  206.     {'x', "xbreak"},    /*  4 */
  207.     {'v', "xvar"},        /*  5 */
  208.     {'g', "xgrid"},        /*  6 */
  209.     {'u', "pullup"},    /*  7 */
  210. {'\0', 0}};
  211.  
  212. LOCAL_FUNC int NEAR
  213. menu_hud_ground (void)
  214. {
  215.     int    sel, quit;
  216.  
  217.     SetOption (0, 2);
  218.     sel = 0;
  219.     for (quit = 0; !quit;) {
  220.         sel = menu_open (MenuHudGround, 0);
  221.         switch (sel) {
  222.         case MENU_ABORTED:
  223.         default:
  224.             quit = 1;
  225.             break;
  226.         case 0:
  227.         case 1:
  228.         case 2:
  229.             SetOption (0, sel);
  230.             break;
  231.         case 3:
  232.             SetOption (&EE(CV)->hud1, HUD_PENDULUM);
  233.             break;
  234.         case 4:
  235.             SetOption (&EE(CV)->hud2, HUD_XBREAK);
  236.             break;
  237.         case 5:
  238.             SetOption (&EE(CV)->hud3, HUD_XVAR);
  239.             break;
  240.         case 6:
  241.             SetOption (&EE(CV)->hud2, HUD_XGRID);
  242.             break;
  243.         case 7:
  244.             SetOption (&EE(CV)->hud3, HUD_CUE);
  245.             break;
  246.         }
  247.         if (MENU_FAILED != sel)
  248.             menu_close ();
  249.     }
  250.  
  251.     return (0);
  252. }
  253.  
  254. /* Select HUD parts
  255. */
  256.  
  257. static MENU FAR    MenuHudParts[] = {
  258.     {'0', "off"},        /*  0 */
  259.     {'1', "on"},        /*  1 */
  260.     {'2', "toggle"},    /*  2 */
  261.     {'l', "ladder"},    /*  3 */
  262.     {'a', "altitude"},    /*  4 */
  263.     {'s', "speed"},        /*  5 */
  264.     {'h', "heading"},    /*  6 */
  265.     {'b', "border"},    /*  7 */
  266.     {'v', "vv"},        /*  8 */
  267.     {'w', "vw"},        /*  9 */
  268.     {'+', "plus"},        /* 10 */
  269.     {'P', "pointer"},    /* 11 */
  270.     {'B', "beta"},        /* 12 */
  271.     {'g', "ground"},    /* 13 */
  272.     {'d', "director"},    /* 14 */
  273.     {'y', "waypoint"},    /* 15 */
  274.     {'t', "tracers"},    /* 16 */
  275.     {'G', "ghost"},        /* 17 */
  276.     {'T', "truehead"},    /* 18 */
  277. {'\0', 0}};
  278.  
  279. LOCAL_FUNC int NEAR
  280. menu_hudparts (void)
  281. {
  282.     int    sel, quit;
  283.  
  284.     SetOption (0, 2);
  285.     sel = 0;
  286.     for (quit = 0; !quit;) {
  287.         sel = menu_open (MenuHudParts, 0);
  288.         switch (sel) {
  289.         case MENU_ABORTED:
  290.         default:
  291.             quit = 1;
  292.             break;
  293.         case 0:
  294.         case 1:
  295.         case 2:
  296.             SetOption (0, sel);
  297.             break;
  298.         case 3:
  299.             menu_ladder ();
  300.             quit = 1;
  301.             break;
  302.         case 4:
  303.             SetOption (&EE(CV)->hud2, HUD_ALTITUDE);
  304.             break;
  305.         case 5:
  306.             SetOption (&EE(CV)->hud2, HUD_SPEED);
  307.             break;
  308.         case 6:
  309.             SetOption (&EE(CV)->hud2, HUD_HEADING);
  310.             break;
  311.         case 7:
  312.             SetOption (&EE(CV)->hud1, HUD_BORDER);
  313.             break;
  314.         case 8:
  315.             SetOption (&EE(CV)->hud, HUD_VV);
  316.             break;
  317.         case 9:
  318.             SetOption (&EE(CV)->hud2, HUD_VW);
  319.             break;
  320.         case 10:
  321.             SetOption (&EE(CV)->hud, HUD_PLUS);
  322.             break;
  323.         case 11:
  324.             SetOption (&EE(CV)->hud, HUD_CURSOR);
  325.             break;
  326.         case 12:
  327.             SetOption (&EE(CV)->hud2, HUD_BETA);
  328.             break;
  329.         case 13:
  330.             menu_hud_ground ();
  331.             quit = 1;
  332.             break;
  333.         case 14:
  334.             SetOption (&EE(CV)->hud2, HUD_DIRECTOR);
  335.             break;
  336.         case 15:
  337.             SetOption (&EE(CV)->hud2, HUD_WAYPOINT);
  338.             break;
  339.         case 16:
  340.             SetOption (&EE(CV)->hud2, HUD_BTRAIL);
  341.             break;
  342.         case 17:
  343.             SetOption (&EE(CV)->hud3, HUD_GVV);
  344.             break;
  345.         case 18:
  346.             SetOption (&EE(CV)->hud3, HUD_TRUEHEADING);
  347.             break;
  348.         }
  349.         if (MENU_FAILED != sel)
  350.             menu_close ();
  351.     }
  352.  
  353.     return (0);
  354. }
  355.  
  356. /* Select HUD options.
  357. */
  358.  
  359. static MENU FAR    MenuHudOptions1[] = {
  360.     {'0', "off"},        /*  0 */
  361.     {'1', "on"},        /*  1 */
  362.     {'2', "toggle"},    /*  2 */
  363.     {'3', "heading"},    /*  3 */
  364.     {'k', "knots"},        /*  4 */
  365.     {'T', "top"},        /*  5 */
  366.     {'f', "fine"},        /*  6 */
  367.     {'x', "xfine"},        /*  7 */
  368.     {'b', "big"},        /*  8 */
  369.     {'l', "scale"},        /*  9 */
  370.     {'a', "area"},        /* 10 */
  371.     {'c', "cas"},        /* 11 */
  372. {'\0', 0}};
  373.  
  374. LOCAL_FUNC int NEAR
  375. menu_hudoptions1 (void)
  376. {
  377.     int    sel, quit, ch;
  378.     char    msg[80], prompt[80];
  379.  
  380.     SetOption (0, 2);
  381.     sel = 0;
  382.     for (quit = 0; !quit;) {
  383.         sel = menu_open (MenuHudOptions1, 0);
  384.         switch (sel) {
  385.         case MENU_ABORTED:
  386.         case MENU_FAILED:
  387.         default:
  388.             quit = 1;
  389.             break;
  390.         case 0:
  391.         case 1:
  392.         case 2:
  393.             SetOption (0, sel);
  394.             break;
  395.         case 3:
  396.             SetOption (&EE(CV)->hud, HUD_FULLHEADING);
  397.             break;
  398.         case 4:
  399.             SetOption (&EE(CV)->hud1, HUD_KNOTS);
  400.             break;
  401.         case 5:
  402.             SetOption (&EE(CV)->hud1, HUD_TOP);
  403.             break;
  404.         case 6:
  405.             SetOption (&EE(CV)->hud, HUD_FINE);
  406.             if (EE(CV)->hud & HUD_FINE)
  407.                 EE(CV)->hud &= ~HUD_XFINE;
  408.             break;
  409.         case 7:
  410.             SetOption (&EE(CV)->hud, HUD_XFINE);
  411.             if (EE(CV)->hud & HUD_XFINE)
  412.                 EE(CV)->hud &= ~HUD_FINE;
  413.             break;
  414.         case 8:
  415.             SetOption (&EE(CV)->hud, HUD_BIG);
  416.             break;
  417.         case 9:
  418.             for (;;) {
  419.                 sprintf (prompt, "scale len(%d)[10-25]",
  420.                     (int)EE(CV)->tapelen);
  421.                 sprintf (msg, "%d", (int)EE(CV)->tapelen);
  422.                 edit_str (prompt, msg, sizeof (msg));
  423.                 if ('\0' == msg[0])
  424.                     break;
  425.                 if (1 == sscanf (msg, "%u", &ch) &&
  426.                     ch >= 10 && ch <= 25) {
  427.                     EE(CV)->tapelen = (short)ch;
  428.                     break;
  429.                 }
  430.             }
  431.             break;
  432.         case 10:
  433.             for (;;) {
  434.                 sprintf (prompt, "hud area(%dDeg)[1-45]",
  435.                     (int)EE(CV)->hudarea);
  436.                 sprintf (msg, "%d", (int)EE(CV)->hudarea);
  437.                 edit_str (prompt, msg, sizeof (msg));
  438.                 if ('\0' == msg[0])
  439.                     break;
  440.                 if (1 == sscanf (msg, "%u", &ch) &&
  441.                     ch >= 1 && ch <= 45) {
  442.                     EE(CV)->hudarea = (short)ch;
  443.                     break;
  444.                 }
  445.             }
  446.             break;
  447.         case 11:
  448.             SetOption (&EE(CV)->hud2, HUD_CALIBRATED);
  449.             break;
  450.         }
  451.         if (MENU_FAILED != sel)
  452.             menu_close ();
  453.     }
  454.  
  455.     return (0);
  456. }
  457.  
  458. static MENU FAR    MenuHudOptions2[] = {
  459.     {'0', "off"},        /*  0 */
  460.     {'1', "on"},        /*  1 */
  461.     {'2', "toggle"},    /*  2 */
  462.     {'A', "a alarm"},    /*  3 */
  463.     {'V', "v alarm"},    /*  4 */
  464.     {'p', "panel"},        /*  5 */
  465.     {'F', "font"},        /*  6 */
  466.     {'S', "fontsize"},    /*  7 */
  467. {'\0', 0}};
  468.  
  469. LOCAL_FUNC int NEAR
  470. menu_hudoptions2 (void)
  471. {
  472.     int    sel, quit, ch;
  473.     char    msg[80], prompt[80];
  474.     HMSG    *m;
  475.  
  476.     SetOption (0, 2);
  477.     sel = 0;
  478.     for (quit = 0; !quit;) {
  479.         sel = menu_open (MenuHudOptions2, 0);
  480.         switch (sel) {
  481.         case MENU_ABORTED:
  482.         case MENU_FAILED:
  483.         default:
  484.             quit = 1;
  485.             break;
  486.         case 0:
  487.         case 1:
  488.         case 2:
  489.             SetOption (0, sel);
  490.             break;
  491.         case 3:
  492.             SetOption (&EE(CV)->hud1, HUD_AALARM);
  493.             break;
  494.         case 4:
  495.             SetOption (&EE(CV)->hud1, HUD_VALARM);
  496.             break;
  497.         case 5:
  498.             SetOption (&EE(CV)->hud1, HUD_PANEL);
  499.             break;
  500.         case 6:
  501.             for (;;) {
  502.                 m = MsgPrintf (0, "StFont(%d)?[0-9]",
  503.                     (int)st.StFont);
  504.                 ch = mgetch ();
  505.                 msg_del (m);
  506.                 if (ch >= '0' && ch <= '9') {
  507.                     font_set (ch - '0');
  508.                     break;
  509.                 }
  510.             }
  511.             break;
  512.         case 7:
  513.             for (;;) {
  514.                 sprintf (prompt, "StFontSize(%d)[4-64]",
  515.                     (int)st.StFontSize);
  516.                 sprintf (msg, "%d", (int)st.StFontSize);
  517.                 edit_str (prompt, msg, sizeof (msg));
  518.                 if ('\0' == msg[0])
  519.                     break;
  520.                 if (1 == sscanf (msg, "%u", &ch) &&
  521.                     ch >= 8/2 && ch <= 8*8) {
  522.                     st.StFontSize = ch;
  523.                     break;
  524.                 }
  525.             }
  526.             break;
  527.         }
  528.         if (MENU_FAILED != sel)
  529.             menu_close ();
  530.     }
  531.  
  532.     return (0);
  533. }
  534.  
  535. /* Select HUD radar options.
  536. */
  537.  
  538. static MENU FAR    MenuHudRadar[] = {
  539.     {'0', "off"},        /*  0 */
  540.     {'1', "on"},        /*  1 */
  541.     {'2', "toggle"},    /*  2 */
  542.     {'C', "corner"},    /*  3 */
  543.     {'d', "data"},        /*  4 */
  544.     {'D', "distance"},    /*  5 */
  545.     {'n', "name"},        /*  6 */
  546.     {'a', "accvect"},    /*  7 */
  547.     {'r', "reticle"},    /*  8 */
  548.     {'t', "target"},    /*  9 */
  549.     {'z', "ross"},        /* 10 */
  550.     {'L', "limit"},        /* 11 */
  551.     {'H', "thick"},        /* 12 */
  552.     {'h', "hidetgt"},    /* 13 */
  553.     {'p', "tpointer"},    /* 14 */
  554.     {'v', "vpointer"},    /* 15 */
  555.     {'l', "lead mode"},    /* 16 */
  556. {'\0', 0}};
  557.  
  558. LOCAL_FUNC int NEAR
  559. menu_hudradar (void)
  560. {
  561.     int    sel, quit;
  562.     int    i;
  563.  
  564.     SetOption (0, 2);
  565.     sel = 0;
  566.     for (quit = 0; !quit;) {
  567.         sel = menu_open (MenuHudRadar, 0);
  568.         switch (sel) {
  569.         case MENU_ABORTED:
  570.         case MENU_FAILED:
  571.         default:
  572.             quit = 1;
  573.             break;
  574.         case 0:
  575.         case 1:
  576.         case 2:
  577.             SetOption (0, sel);
  578.             break;
  579.         case 3:
  580.             SetOption (&EE(CV)->hud1, HUD_CORNER);
  581.             break;
  582.         case 4:
  583.             SetOption (&EE(CV)->hud, HUD_DATA);
  584.             break;
  585.         case 5:
  586.             SetOption (&EE(CV)->hud1, HUD_IDIST);
  587.             break;
  588.         case 6:
  589.             SetOption (&EE(CV)->hud1, HUD_INAME);
  590.             break;
  591.         case 7:
  592.             SetOption (&EE(CV)->hud1, HUD_ACCVECT);
  593.             break;
  594.         case 8:
  595.             SetOption (&EE(CV)->hud, HUD_RETICLE);
  596.             break;
  597.         case 9:
  598.             SetOption (&EE(CV)->hud, HUD_TARGET);
  599.             break;
  600.         case 10:
  601.             SetOption (&EE(CV)->hud, HUD_ROSS);
  602.             break;
  603.         case 11:
  604.             SetOption (&EE(CV)->hud1, HUD_LIMIT);
  605.             break;
  606.         case 12:
  607.             SetOption (&EE(CV)->hud1, HUD_THICK);
  608.             break;
  609.         case 13:
  610.             SetOption (&EE(CV)->hud2, HUD_HIDETGT);
  611.             break;
  612.         case 14:
  613.             SetOption (&EE(CV)->hud2, HUD_TPOINTER);
  614.             break;
  615.         case 15:
  616.             SetOption (&EE(CV)->hud2, HUD_VPOINTER);
  617.             break;
  618.         case 16:
  619.             i = (EE(CV)->radar & R_MODES) / R_MODE;
  620.             i = (i + 1) % 5;
  621.             EE(CV)->radar &= ~R_MODES;
  622.             EE(CV)->radar |= i * R_MODE;
  623.             break;
  624.         }
  625.         if (MENU_FAILED != sel)
  626.             menu_close ();
  627.     }
  628.  
  629.     return (0);
  630. }
  631.  
  632. /* Select HDD options.
  633. */
  634.  
  635. static MENU FAR    MenuHdd[] = {
  636.     {'0', "off"},        /*  0 */
  637.     {'1', "on"},        /*  1 */
  638.     {'2', "toggle"},    /*  2 */
  639.     {'i', "instruments"},    /*  3 */
  640.     {'n', "nav"},        /*  4 */
  641.     {'c', "compass"},    /*  5 */
  642.     {'q', " square"},    /*  6 */
  643.     {'o', " ortho"},    /*  7 */
  644. {'\0', 0}};
  645.  
  646. LOCAL_FUNC int NEAR
  647. menu_hdd (void)
  648. {
  649.     int    sel, quit;
  650.  
  651.     SetOption (0, 2);
  652.     sel = 0;
  653.     for (quit = 0; !quit;) {
  654.         sel = menu_open (MenuHdd, 0);
  655.         switch (sel) {
  656.         case MENU_ABORTED:
  657.         case MENU_FAILED:
  658.         default:
  659.             quit = 1;
  660.             break;
  661.         case 0:
  662.         case 1:
  663.         case 2:
  664.             SetOption (0, sel);
  665.             break;
  666.         case 3:
  667.             SetOption (&EE(CV)->hdd, HDD_INSTRUMENTS);
  668.             break;
  669.         case 4:
  670.             SetOption (&EE(CV)->hdd, HDD_NAV);
  671.             break;
  672.         case 5:
  673.             SetOption (&EE(CV)->hdd, HDD_COMPASS);
  674.             break;
  675.         case 6:
  676.             SetOption (&EE(CV)->hdd, HDD_SQRCOMPASS);
  677.             break;
  678.         case 7:
  679.             SetOption (&EE(CV)->hdd, HDD_ORTCOMPASS);
  680.             break;
  681.         }
  682.         if (MENU_FAILED != sel)
  683.             menu_close ();
  684.     }
  685.  
  686.     return (0);
  687. }
  688.  
  689. /* Select HUD sub-menu
  690. */
  691.  
  692. static MENU FAR    MenuHud[] = {
  693.     {'0', "HUD off"},    /*  0 */
  694.     {'u', "HUD on"},    /*  1 */
  695.     {'t', "type"},        /*  2 */
  696.     {'p', "parts"},        /*  3 */
  697.     {'1', "options1"},    /*  4 */
  698.     {'2', "options2"},    /*  5 */
  699.     {'r', "radar"},        /*  6 */
  700.     {'i', "ils"},        /*  7 */
  701.     {'d', "hdd"},        /*  8 */
  702.     {'h', "help"},        /*  9 */
  703. {'\0', 0}};
  704.  
  705. extern int FAR
  706. menu_hud (void)
  707. {
  708.     int    sel;
  709.     Ushort    list;
  710.  
  711.     if (!IS_PLANE(CV))
  712.         return (0);
  713.  
  714.     if (st.flags & SF_VERBOSE) {
  715.         list = set_lists (0);
  716.         set_lists (SF_HUD);
  717.     }
  718.  
  719.     sel = menu_open (MenuHud, 0);
  720.  
  721.     switch (sel) {
  722.     case MENU_ABORTED:
  723.     case MENU_FAILED:
  724.     default:
  725.         break;
  726.     case 0:
  727.         EE(CV)->hud &= ~HUD_ON;
  728.         break;
  729.     case 1:
  730.         EE(CV)->hud |= HUD_ON;
  731.         break;
  732.     case 2:
  733.         menu_hudtype ();
  734.         break;
  735.     case 3:
  736.         menu_hudparts ();
  737.         break;
  738.     case 4:
  739.         menu_hudoptions1 ();
  740.         break;
  741.     case 5:
  742.         menu_hudoptions2 ();
  743.         break;
  744.     case 6:
  745.         menu_hudradar ();
  746.         break;
  747.     case 7:
  748.         menu_ils ();
  749.         break;
  750.     case 8:
  751.         menu_hdd ();
  752.         break;
  753.     case 9:
  754.         set_lists (SF_HUD);
  755.         break;
  756.     }
  757.     if (MENU_FAILED != sel)
  758.         menu_close ();
  759.  
  760.     if (st.flags & SF_VERBOSE)
  761.         set_lists (list);
  762.     return (0);
  763. }
  764.  
  765. extern void FAR
  766. hud_setup (OBJECT *p)
  767. {
  768.     int    font;
  769.  
  770.     EX->hud  &= HUD_ON|HUD_CURSOR|HUD_ROSS;
  771.     EX->hud1 &= HUD_TYPES|HUD_INAME|HUD_IDIST|HUD_PANEL;
  772.     EX->hud2 &= HUD_ILS|HUD_XGRID;
  773.     EX->hud3 &= HUD_GVV;
  774.     EX->ladder = 0;
  775.  
  776.     EX->hud  |= HUD_DEFAULT|HUD_LADDER;
  777.     EX->hud1 |= HUD_VALARM|HUD_AALARM|HUD_LIMIT|HUD_BORDER;
  778.     EX->hud2 |= HUD_HEADING|HUD_ALTITUDE|HUD_SPEED|HUD_XBREAK;
  779.     EX->hud3 |= HUD_CUE;
  780.  
  781.     switch (EX->hud1 & HUD_TYPES) {
  782.     case HUD_F15:
  783.         EX->hud  |= HUD_FINE|HUD_PLUS|HUD_DATA;
  784.         EX->hud1 |= HUD_KNOTS|HUD_ACCVECT;
  785.         EX->hud2 |= HUD_HIDETGT;
  786.         EX->ladder |= LD_NEGTIP;
  787.         EX->hudarea = 10;
  788.         EX->hudshift = FCON (0.40);
  789.         EX->ldgap = FCON(0.077);
  790.         EX->ldstep = FCON(0.238);
  791.         EX->ldstep0 = FCON(0.391);
  792.         EX->ldstepg = FCON(0.61);    /* ??? */
  793.         EX->ldtip = FCON (0.03);
  794.         EX->ldndash = 5;
  795.         font = 1;
  796.         EX->hudFontSize = FCON(0.06);
  797.         break;
  798.     case HUD_F16:
  799.         EX->hud  |= HUD_PLUS|HUD_DATA;
  800.         EX->hud1 |= HUD_KNOTS|HUD_ACCVECT|HUD_PENDULUM|HUD_CORNER;
  801.         EX->hud2 |= HUD_BTRAIL|HUD_TPOINTER;
  802.         EX->hud3 |= HUD_XVAR;
  803.         EX->ladder |= LD_NEGTIP;
  804.         EX->hudarea = 11;
  805.         EX->hudshift = FCON (0.50);
  806.         EX->ldgap = FCON(0.085);
  807.         EX->ldstep = FCON(0.220);
  808.         EX->ldstep0 = FCON(0.58);
  809.         EX->ldstepg = FCON(0.58);
  810.         EX->ldtip = FCON (0.03);
  811.         EX->ldndash = 4;
  812.         font = 1;
  813.         EX->hudFontSize = FCON(0.045);
  814.         break;
  815.     case HUD_FA18:
  816.         EX->hud  |= HUD_FULLHEADING|HUD_DATA;
  817.         EX->hud1 |= HUD_KNOTS|HUD_PENDULUM;
  818.         EX->hud2 |= HUD_VW;
  819.         EX->hud3 |= HUD_GVV;
  820.         EX->ladder |= LD_SLANT|LD_ZENITH|LD_UNDER|LD_TIP0|LD_NEGTIP;
  821.         EX->hudarea = 10;
  822.         EX->hudshift = FCON (0.4);
  823.         EX->ldgap = FCON(0.11);
  824.         EX->ldstep = FCON(0.23);
  825.         EX->ldstep0 = FCON(0.34);
  826.         EX->ldstepg = FCON(0.96);
  827.         EX->ldtip = FCON (0.06);
  828.         EX->ldndash = 5;
  829.         font = 1;
  830.         EX->hudFontSize = FCON(0.06);
  831.         break;
  832.     case HUD_ETHER:
  833.         EX->hud  |= HUD_BIG|HUD_XFINE|HUD_DATA|HUD_PLUS;
  834.         EX->hud1 &= ~HUD_BORDER;
  835.         EX->hud1 |= HUD_KNOTS|HUD_TOP;
  836.         EX->hud2 |= HUD_VW|HUD_TPOINTER;
  837.         EX->hud3 |= HUD_TRUEHEADING;
  838.         EX->ladder |= LD_NEGTIP;
  839.         EX->hudarea = 15;
  840.         EX->tapelen = 16;        /* scales length */
  841.         EX->hudshift = 0;
  842.         EX->ldgap = FONE/32*5;
  843.         EX->ldstep = FONE/32*12;
  844.         EX->ldstep0 = FONE/32*18;
  845.         EX->ldstepg= FONE/32*18;
  846.         EX->ldtip = FCON (0.03);
  847.         EX->ldndash = 5;
  848.         font = 1;
  849.         EX->hudFontSize = FCON(0.06);
  850.         break;
  851.     default:
  852.         EX->hud  |= HUD_BIG|HUD_XFINE|HUD_PLUS|HUD_DATA;
  853.         EX->hud1 |= HUD_KNOTS|HUD_TOP;
  854.         EX->hud2 |= HUD_VW;
  855.         EX->ladder |= LD_ERECT|LD_NEGTIP;
  856.         EX->hudarea = 11;
  857.         EX->tapelen = 16;        /* scales length */
  858.         EX->hudshift = FCON (0.3);
  859.         EX->ldgap = FONE/32*5;
  860.         EX->ldstep = FONE/32*12;
  861.         EX->ldstep0 = FONE/32*18;
  862.         EX->ldstepg= FONE/32*18;
  863.         EX->ldtip = FCON (0.03);
  864.         EX->ldndash = 5;
  865.         font = 0;
  866.         EX->hudFontSize = FCON(0.05);
  867.         break;
  868.     }
  869.     if (MODEL_CLASSIC != EP->opt[0])
  870.         EX->hud  |= HUD_VV;
  871.  
  872.     if (!CC || CC == p)
  873.         font_set (font);
  874. }
  875.  
  876. extern void FAR
  877. cc_setup (void)
  878. {
  879.     if (st.flags & SF_BLANKER) {
  880.         EE(CC)->hud1 &= ~HUD_PANEL;
  881.         EE(CC)->radar = R_ON | R_LOCK | (3*R_MODE);
  882.         EE(CC)->flags |= PF_CHASE | PF_KILL;
  883.         EE(CC)->weapon = WE_M61;
  884.     } else if (WIN_FULL == st.windows)
  885.         EE(CC)->hud1 |= HUD_PANEL;
  886.  
  887.     if (WIN_ETHER == st.windows) {
  888.         EE(CC)->hud1 = (EE(CC)->hud1 & ~HUD_TYPES) | HUD_ETHER;
  889.         hud_setup (CC);
  890.     }
  891. }
  892.  
  893. extern void FAR
  894. win_setup (void)
  895. {
  896.     if (WIN_ETHER == st.windows && CC && IS_PLANE (CC))
  897.         EE(CC)->hdd |= HDD_COMPASS | HDD_SQRCOMPASS | HDD_ORTCOMPASS;
  898. }
  899.